#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        //首先对这个区间进行左端点排序
        sort(intervals.begin(),intervals.end());
        int left = intervals[0][0];
        int right = intervals[0][1];//记录第一个元素，用于下面的合并工作
        vector<vector<int>> ret;
        vector<int> tmp;
        for(int i =1;i<intervals.size();i++)
        {
            int a = intervals[i][0];
            int b = intervals[i][1];
            if(a>=left&&a<=right)
            {
                //存在可以合并的区间
                if(b>right)
                {
                    right = b;
                }
                //在这里就不断地合并右端点
            }
            else
            {
                //当遇到i这个区间不能和之前地区间进行合并时，这里是将i之前可以合并地区间放入到了ret中
                //不存在可以合并的区间
                tmp.clear();
                tmp.push_back(left);
                tmp.push_back(right);
                ret.push_back(tmp);
                left = a;
                right = b;
            }
        }
        //这里需要额外处理一次,因为最后一个区间（无论是否合并）都没有被放入到tmp中
        tmp.clear();
        tmp.push_back(left);
        tmp.push_back(right);
        ret.push_back(tmp);
        return ret;
    }
};